]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
screencastService: Fixup pipeline fallback behavior
authorJonas Dreßler <verdre@v0yd.nl>
Wed, 26 Apr 2023 17:13:27 +0000 (19:13 +0200)
committerMarge Bot <marge-bot@gnome.org>
Wed, 26 Apr 2023 18:02:57 +0000 (18:02 +0000)
Calling _teardownPipeline() before _tryNextPipeline() was actually not a
good idea, it sets the pipelineState to STOPPED, which means we can't try
any of the following pipelines anymore.

Instead what we want to do is set the pipeline state of the old pipeline to
NULL when trying a new one, without calling _teardownPipeline() for that.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2754>

js/dbusServices/screencast/screencastService.js

index d63dd8087641515c41bbfa6891e670ba4e9559ea..6ab92b53eb14ec2c07268c1895c62c3dc973ddc4 100644 (file)
@@ -197,11 +197,17 @@ var Recorder = class extends Signals.EventEmitter {
     _tryNextPipeline() {
         const {done, value: pipelineConfig} = this._pipelineConfigs.next();
         if (done) {
-            this._teardownPipeline();
             this._handleFatalPipelineError('All pipelines failed to start');
             return;
         }
 
+        if (this._pipeline) {
+            if (this._pipeline.set_state(Gst.State.NULL) !== Gst.StateChangeReturn.SUCCESS)
+                log('Failed to set pipeline state to NULL');
+
+            this._pipeline = null;
+        }
+
         try {
             this._pipeline = this._createPipeline(this._nodeId, pipelineConfig,
                 this._framerate);
@@ -224,7 +230,6 @@ var Recorder = class extends Signals.EventEmitter {
             retval === Gst.StateChangeReturn.ASYNC) {
             // We'll wait for the state change message to PLAYING on the bus
         } else {
-            this._teardownPipeline();
             this._tryNextPipeline();
         }
     }